1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing.testers;
18
19 import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
20 import static com.google.common.collect.testing.features.CollectionSize.ZERO;
21 import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
22
23 import com.google.common.annotations.GwtCompatible;
24 import com.google.common.annotations.GwtIncompatible;
25 import com.google.common.collect.testing.Helpers;
26 import com.google.common.collect.testing.features.CollectionFeature;
27 import com.google.common.collect.testing.features.CollectionSize;
28 import com.google.common.collect.testing.features.ListFeature;
29
30 import java.lang.reflect.Method;
31
32
33
34
35
36
37
38
39 @GwtCompatible(emulated = true)
40 public class ListSetTester<E> extends AbstractListTester<E> {
41 @ListFeature.Require(SUPPORTS_SET)
42 @CollectionSize.Require(absent = ZERO)
43 public void testSet() {
44 doTestSet(samples.e3);
45 }
46
47 @CollectionSize.Require(absent = ZERO)
48 @CollectionFeature.Require(ALLOWS_NULL_VALUES)
49 @ListFeature.Require(SUPPORTS_SET)
50 public void testSet_null() {
51 doTestSet(null);
52 }
53
54 @CollectionSize.Require(absent = ZERO)
55 @CollectionFeature.Require(ALLOWS_NULL_VALUES)
56 @ListFeature.Require(SUPPORTS_SET)
57 public void testSet_replacingNull() {
58 E[] elements = createSamplesArray();
59 int i = aValidIndex();
60 elements[i] = null;
61 collection = getSubjectGenerator().create(elements);
62
63 doTestSet(samples.e3);
64 }
65
66 private void doTestSet(E newValue) {
67 int index = aValidIndex();
68 E initialValue = getList().get(index);
69 assertEquals("set(i, x) should return the old element at position i.",
70 initialValue, getList().set(index, newValue));
71 assertEquals("After set(i, x), get(i) should return x",
72 newValue, getList().get(index));
73 assertEquals("set() should not change the size of a list.",
74 getNumElements(), getList().size());
75 }
76
77 @ListFeature.Require(SUPPORTS_SET)
78 public void testSet_indexTooLow() {
79 try {
80 getList().set(-1, samples.e3);
81 fail("set(-1) should throw IndexOutOfBoundsException");
82 } catch (IndexOutOfBoundsException expected) {
83 }
84 expectUnchanged();
85 }
86
87 @ListFeature.Require(SUPPORTS_SET)
88 public void testSet_indexTooHigh() {
89 int index = getNumElements();
90 try {
91 getList().set(index, samples.e3);
92 fail("set(size) should throw IndexOutOfBoundsException");
93 } catch (IndexOutOfBoundsException expected) {
94 }
95 expectUnchanged();
96 }
97
98 @CollectionSize.Require(absent = ZERO)
99 @ListFeature.Require(absent = SUPPORTS_SET)
100 public void testSet_unsupported() {
101 try {
102 getList().set(aValidIndex(), samples.e3);
103 fail("set() should throw UnsupportedOperationException");
104 } catch (UnsupportedOperationException expected) {
105 }
106 expectUnchanged();
107 }
108
109 @CollectionSize.Require(ZERO)
110 @ListFeature.Require(absent = SUPPORTS_SET)
111 public void testSet_unsupportedByEmptyList() {
112 try {
113 getList().set(0, samples.e3);
114 fail("set() should throw UnsupportedOperationException "
115 + "or IndexOutOfBoundsException");
116 } catch (UnsupportedOperationException tolerated) {
117 } catch (IndexOutOfBoundsException tolerated) {
118 }
119 expectUnchanged();
120 }
121
122 @CollectionSize.Require(absent = ZERO)
123 @ListFeature.Require(SUPPORTS_SET)
124 @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
125 public void testSet_nullUnsupported() {
126 try {
127 getList().set(aValidIndex(), null);
128 fail("set(null) should throw NullPointerException");
129 } catch (NullPointerException expected) {
130 }
131 expectUnchanged();
132 }
133
134 private int aValidIndex() {
135 return getList().size() / 2;
136 }
137
138
139
140
141
142
143
144
145
146
147
148
149
150 @GwtIncompatible("reflection")
151 public static Method getSetNullSupportedMethod() {
152 return Helpers.getMethod(ListSetTester.class, "testSet_null");
153 }
154 }